home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / UTILITY / MIDI8031 / MORSE.S51 < prev    next >
Encoding:
Text File  |  1987-04-21  |  3.7 KB  |  148 lines

  1. ; ***********************************************
  2. ; * MIDI8051 - Mikrocontroller Entwicklungsboard 
  3. ; * fuer ATARI ST/STE 
  4. ; *
  5. ; * MORSE: Diese kleine Demo sendet einen Text im
  6. ; *        Morsealphabet. Das Signal wird auf der
  7. ; *        eingebauten LED (optisch) und und am 
  8. ; *           Port P1.0 als Tonsignal ausgegeben.
  9. ; *        Mit einer Taste zwischen P3.3 und GND
  10. ; *        laesst sich die Morsetonhoehe aendern.
  11. ; *
  12. ; ***********************************************
  13.  
  14.     .registers reg51.inc    ; 8031-Register-Defs.
  15.  
  16. ; * Konstanten: Morsetempo und Tonhoehe:
  17. tonh_o = 200                ; Die orig. Werte
  18. speed_o = 200
  19.  
  20. ; * Variablen (im internen RAM)
  21.  
  22.             .var_org $30
  23.  
  24. tonh:    .ds.b 1                ; 1 Byte fuer tonh
  25. speed:    .ds.b 1                ; 1 Byte fuer speed
  26. stack:                        ; darueber ist Stack
  27.  
  28.     .text_org $8000        ; RAM Entwicklungsboards
  29.  
  30. ; * Hier geht's los:
  31. go_0:
  32.     mov SP,#stack            ; Stack ueber Vars.
  33.     mov tonh,#tonh_o        ; Variablen init.
  34.     mov speed,#speed_o        ; Originalpeed
  35.  
  36. go:
  37.     mov DPTR,#text            ; Auf den Text zeigen
  38.             
  39. again:
  40.     movx A,@DPTR        ; Zeich. @DPTR im XRAM
  41.     inc DPTR            ; DPTR auf naechstes Byte
  42.     jz go                ; '0': Wieder von vorne
  43.  
  44.     jb P3.3,ton_ok        ; Schalter am Port gedr.?
  45.     inc speed            ; Ton hoeher, damit aber
  46.     dec tonh            ; wg. Tempo konst.: Speed dekr.
  47.     mov A,#'e'          ; ein 'e' ausgeben (.)
  48.     mov DPTR,#text        ; und wieder von vorne...
  49. ton_ok:
  50.  
  51.     cjne A,#' ',was
  52.  
  53.     mov R3,#16            ; Space: Laengere Pause
  54.     acall pause
  55.     sjmp again            ; und von vorne
  56.  
  57. was:                    ; Es gibt was zu piepsen
  58.     acall holen            ; Daten zum Buchst. holen
  59. zeich:
  60.     setb P3.5            ; LED an
  61.     rlc A                ; A shift, Bit7 in Carry
  62.     jnc kurz
  63.     acall on            ; Lang: lang piepsen
  64.     acall on
  65. kurz:
  66.     acall on            ; Kurz: kurz piepsen
  67.     clr P3.5            ; LED aus
  68.     setb P1.0            ; Lautsp. aus (sparen!)        
  69.  
  70.     mov R3,#1            
  71.     acall pause            ; kurz warten
  72.     djnz R0,zeich        ; Zeichen ausgeben
  73.     
  74.     mov R3,#4            ; am Ende:
  75.     acall pause            ; laengere Pause
  76.  
  77.     sjmp again            ; Bis Textende...
  78.  
  79. ; * pause: Wartet in R2 angegebene Pausen
  80. pause:
  81.     mov R2,speed
  82. ?p1:
  83.     mov R1,tonh            ; Timing wie 'on:'
  84.     djnz R1,!            ; Inner Warteschleife        
  85.     djnz R2,?p1
  86.     djnz R3,pause        ; Aeussere Warteschl.
  87.     ret
  88.  
  89. ; * on: Sound piepen, kurz warten
  90. on:
  91.     mov R2,speed        ; 'speed' mal
  92. ?o1:                    ; '?': Verstecktes Label    
  93.     cpl P1.0            ; Lautsprecher AN/AUS
  94.     mov R1,tonh            ; tonhoehe
  95.     djnz R1,!            ; Inner Warteschleife        
  96.     djnz R2,?o1            ; Aeussere Warteschl.
  97.     ret
  98.     
  99. ; * Holen A: Lang/Kurz's, R0: Anzahl Bits
  100. holen:
  101.     add A,#-'a'                    ; A=A-'a'
  102.     rl A                        ; A=2*A
  103.     mov R0,A                    ; A merken
  104.     add A,#(alphabet-h1)+1        ; Offs. zur Tab.
  105.     movc A,@A+PC                ; Anz. Bits holen
  106. h1:
  107.     xch A,R0                    ; A/R0 vertausch.
  108.     add A,#alphabet-h2            ; R0: Anzahl Bits
  109.     movc A,@A+PC                ; A: Muster
  110. h2:
  111.     ret
  112.  
  113. alphabet:                
  114. ; * Aufb.: 1.) 1/0: lang/kurz, 2.) Anz. Bits  
  115.     .dc.b %01000000,2     ; 'a'  .-
  116.     .dc.b %10000000,4    ; 'b'  -...
  117.     .dc.b %10100000,4    ; 'c'  -.-.
  118.     .dc.b %10000000,3    ; 'd'  -..
  119.     .dc.b %00000000,1    ; 'e'  .
  120.     .dc.b %00100000,4     ; 'f'  ..-.
  121.     .dc.b %11000000,3   ; 'g'  --.
  122.     .dc.b %00000000,4   ; 'h'  ....
  123.     .dc.b %00000000,3   ; 'i'  ..
  124.     .dc.b %01110000,4   ; 'j'  .---
  125.     .dc.b %10100000,3     ; 'k'  -.-
  126.     .dc.b %01000000,4     ; 'l'  .-..
  127.     .dc.b %11000000,2     ; 'm'  --
  128.     .dc.b %10000000,2     ; 'n'  -.
  129.     .dc.b %11100000,3     ; 'o'  ---
  130.     .dc.b %01100000,4     ; 'p'  .--.
  131.     .dc.b %11010000,4     ; 'q'  --.-
  132.     .dc.b %10100000,3     ; 'r'  -.-
  133.     .dc.b %00000000,3     ; 's'  ...
  134.     .dc.b %10000000,1     ; 't'  -
  135.     .dc.b %00100000,3     ; 'u'  ..-
  136.     .dc.b %00100000,4     ; 'v'  ...-
  137.     .dc.b %01100000,3     ; 'w'  .--
  138.     .dc.b %10010000,4     ; 'x'  -..-
  139.     .dc.b %10110000,4     ; 'y'  -.--
  140.     .dc.b %11000000,4     ; 'z'  --..
  141.  
  142. ; * Der Morsetext (nur Kleinbuchstaben und 
  143. ;* 'Space', keine Zahlen!)
  144. text:
  145.     .dc.b "hallo user hier morst dein "
  146.     .dc.b "mikrocontroller   ",0
  147.  
  148.